#ifndef B2D_WIN32WINDOW_H
#define B2D_WIN32WINDOW_H

#include "BaseWindow.h"

NS_B2D_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////
/// \brief	Win32 platform-specific display surface.
////////////////////////////////////////////////////////////////////////////////////////////////////
class B2D_API Win32Window
	: public BaseWindow
{
private:
	HWND mWindowHandle;
	bool mExternalRC;

public:
	virtual ~Win32Window(void);

	// ::BaseWindow
	WindowHandle getWindowHandle(void) const;
	void* getRTHandle(void) const;
	void resize(const size2& size);
	void move(const ivec2& pos);
	void setTitle(const string& title);

_internal:
	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// \brief	Win32 message pump.
	////////////////////////////////////////////////////////////////////////////////////////////////////
	static void _MessagePump(void);

protected:
	Win32Window(const WindowOptions& opts);
	Win32Window(WindowHandle externalHandle);

private:
	void create(WindowOptions& ops);
	void create(WindowHandle handle);

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// \brief	Gets the hinstance.
	///
	/// \return	The hinstance.
	////////////////////////////////////////////////////////////////////////////////////////////////////
	static HINSTANCE GetHINSTANCE(void);
	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// \brief	Window proc.
	///
	/// \param	hWnd   	Handle of the window.
	/// \param	message	The message.
	/// \param	wParam 	The wParam field of the message.
	/// \param	lParam 	The lParam field of the message.
	///
	/// \return	Result.
	////////////////////////////////////////////////////////////////////////////////////////////////////
	static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
};

NS_B2D_END

#endif